#ifndef XETHERNET_H
#define XETHERNET_H

#include "gdbinfo.h"
#include "xnet_tiny.h"
#include "xnet_err.h"
#include "protocol.h"

#define XNET_MAC_ADDR_SIZE 6
// 初始化的时候，会将port_pcap.c里的my_mac_addr赋值给netif_mac
extern uint8_t my_mac[XNET_MAC_ADDR_SIZE]; // mac地址

#pragma(1)
// 以太网的包头
typedef struct _xethernet_hdr_t
{
    uint8_t dest[XNET_MAC_ADDR_SIZE]; // 目标的mac地址
    uint8_t src[XNET_MAC_ADDR_SIZE];  // 源的mac地址
    uint16_t protocal;                // 协议长度
} xether_hdr_t;

xnet_err_t ethernet_init(void);
#pragma()

void ethernet_poll(void);
xnet_err_t ethernet_out_to(xnet_protocol_t protocol, const uint8_t *mac_addr, xnet_packet_t *packet);
xnet_err_t ethernet_out(xnet_protocol_t protocol, const uint8_t *target_ip, xnet_packet_t *packet);

static void ethernet_in(xnet_packet_t *packet);

#endif // XETHERNET_H